/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package manejadores;

import entidates.IEntidad;
import interfaces.IManejador;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;

/**
 *
 * @author Overpower
 */
public abstract class Manejador implements IManejador {
    
    //======================================================= 
    protected ArrayList<IEntidad> _listaEntidades;

    public Manejador()
    {
        _listaEntidades = new ArrayList<>();
    }
    
    public ArrayList<IEntidad> GetList()
    {
        return _listaEntidades;
    }
    
    @Override
    public String Agregar(IEntidad _object) {
        
        String _err = ValidarEntidad(_object);
        
        if( "".equals(_err) )
        {
            _err += Agregar_BD(_object);
        }
        
        if( "".equals(_err) )
        {
            _listaEntidades.add(_object);
        }
        
        return _err;
    }

    @Override
    public String Modificar(IEntidad _object) {
        String _err = ValidarEntidad(_object);
             
        if( "".equals(_err) )
        {
            _err += Modificar_BD(_object);
        }
        
        if( "".equals(_err) )
        {
            for (Object it : _listaEntidades) {
                IEntidad _entidad = (IEntidad)it;
                if( Objects.equals(_entidad.GetID(), _object.GetID()) )
                {
                    _entidad.Copiar( _object );
                    return "";
                }
            }
        }
        
        return _err;
    }

    @Override
    public String Eliminar(IEntidad _object) 
    {    
         
        String _err = Eliminar_BD(_object);
          
        if( "".equals(_err) )
        {
            _listaEntidades.remove(_object);
        }
        
        return "";
    }

    // devuelve una copia del objeto
    @Override
    public IEntidad Obtener(Integer idx) {
      
        return ((IEntidad)_listaEntidades.get(idx) ).Clonar();
    }
    
    protected Boolean ValidarString(String _strDato )
    {
        return ( null != _strDato && !"".equals(_strDato));
    }
    
    protected abstract void ActualizarLista( ArrayList<HashMap<String, Object>> _ht );
    protected abstract HashMap<String, String> GetHashMap(IEntidad _entidad);
    
}
